# 1.集合（set）元素去重的判断依据是什么
# __hash__值相同
# __eq__方法判断元素内容是否相等
# 两者同时满足相等则去重
# 2.总结本周视频讲解魔术方法的作用及什么情况会执行到该方法
# __new__ 实例化一个对象，实例化时调用
# __str__ 返回对象的字符串表达，str()函数、format()函数、print()函数调用
# __repr__ 返回对象的字符串表达，repr()函数调用，__str__没有定义时调用
# __bytes__ 返回bytes对象，bytes()函数调用，__str__和__repr__都没有定义的时候调用
# __hash__ 返回哈希的整数，hash()函数调用
# __eq__ 判断2个对象是否相等，返回bool值，去重时调用
# __bool__ 逻辑判断返回布尔值，bool()函数调用，对象放在逻辑表达式时调用
# __lt__/__le__/__eq__/__gt__/__gr__/__ne__ 运算符重载，对应的比较运算符调用
# __add__/__sub__/__mul__/__truediv__/__mod__/__floordiv__/__pow__/__divmod__ 算数运算符、移位、位运算符重载
# __iadd__/__isub__/__imul__/__itruediv__/__imod__/__ifloordiv__/__ipow__ 迭代运算符重载
# __len__ 返回对象长度，len()函数调用
# __iter__ 返回迭代器对象，对象需要迭代时调用
# __contains__ 判断元素是否存在，in成员运算符调用
# __getitem__ 使用key访问对象元素，self[key]调用
# __setitem__ 设置元素值
# __missing__ key不存在时调用
# __call__ 使实例成为可调用对象，实例调用时调用
# __enter__ 上下文管理-进入对象的上下文，使用with方法时调用将结果绑定给as指定的变量
# __exit__ 上下文管理-退出对象的上下文，退出上下文时调用
# 3.结合本周所学内容，实现如下类：
class Ob():
    def __init__(self, name):
        self.name = name
        self.items = ['1','2']

    def __str__(self):
        return str(self.items)

    def __repr__(self):
        return f'< Ob name = {self.name} items = {self.items} >'

    def __getitem__(self, item):
        return self.items[item]

    def __setitem__(self, key, value):
        self.items[key] = value

    def __len__(self):
        return len(self.items)

    def __delitem__(self, key):
        self.items.remove(self.items[key])

    def __hash__(self):
        return hash(self.name)

    def __eq__(self, other):
        return self.name == other.name

    def __mul__(self, other):
        self.items *=  other



# 执行以下操作：
a = Ob('tom')
b = Ob('tom')
print('a:', a)
a[0] = 'a'
print('a:', a)
a * 3
print('len: ', len(a))
del a[1]
print('a: ', a)
print('set: ', {a, b})

# 其输出如下：
# a: ['1', '2']
# a: ['a', '2']
# len: 6
# a: ['a', 'a', '2', 'a', '2']
# set: { < Ob name = tom items = ['a', 'a', '2', 'a', '2'] >}
















